﻿using Hotel.DAL;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hotel.BLL
{
    class HJScrawler : HotelScrawler
    {
        Funct funct = new Funct();
        InternetService iservice = new InternetService();
        List<string> listName = new List<string>();
        List<string> listUrl  =  new List<string>();
        List<Dictionary<string, string>> DataList = new List<Dictionary<string, string>>();
        public HJScrawler()
        {
            HtmlDoc = new HtmlAgilityPack.HtmlDocument();
           

        }
        public override int GetJobUrls(int from, int to)
        {
            for (int i = from; i < to; i++)
            {
                Stream stream = iservice.GetHtmlStreamGetMethod("http://hoteljob.vn/Home/Gian-hang/default/" + i +"/trang-chu.aspx");
                if (stream != null)
                {
                    HtmlDoc.Load(stream, Encoding.UTF8);
                    var list = HtmlDoc.DocumentNode.SelectNodes("//div[@class='div_hang']//a");
                    if (list != null)
                    {
                        foreach (var item in list)
                        {
           
                            string x = item.InnerText.Trim();
                            string y = "http://hoteljob.vn/" + item.Attributes["href"].Value;
                            listName.Add(x);
                            listUrl.Add(y);
                        }
                    }
                }
                
            }

            return listUrl.Count;
        }

        public override void GetJobDetail()
        {
            List<string> list1 = new List<string>();
            List<string> list2 = new List<string>();

#region Make Dictionary's Default Value 
            Dictionary<string, string> detail = new Dictionary<string, string>()
                                                    {
                                                        {"Tên công ty :",""},
                                                        {"Sơ lược về công ty :",""},
                                                        {"Quy mô công ty :",""},
                                                        {"Chức danh :",""},
                                                        {"Nội dung tuyển dụng :",""},
                                                        {"Yêu cầu chung :",""},
                                                        {"Lĩnh vực làm việc :",""},
                                                        {"Nơi làm việc :",""},
                                                        {"Thời gian làm việc :",""},
                                                        {"Ngành nghề :",""},
                                                        {"Cấp bậc tối thiểu :",""},
                                                        {"Mức lương :",""},
                                                        {"Số lượng cần tuyển :","0"},
                                                        {"Hạn nộp hồ sơ :",""},
                                                        {"Nhận hồ sơ ứng viên bằng:",""},
                                                        {"Người liên hệ :",""},
                                                        {"Số điện thoại :",""},
                                                        {"Số di động :",""},
                                                        {"Email :",""},
                                                        {"Địa chỉ :",""},
                                                        {"xin lưu ý :",""},
                                                        {"Bắt đầu:",""},
                                                        {"Kết thúc:",""}
                                                    };
#endregion

            foreach (var a in listUrl)
            {
                Stream stream = iservice.GetHtmlStreamGetMethod(a);
                HtmlDoc.Load(stream, Encoding.UTF8);

                #region Get List
                //       var list =
                //            HtmlDoc.DocumentNode.SelectNodes(
                //                "((//div[@class='khung_tuyendung']/table//tr/td/table//tr/td/table)[4]//td)");

                //            var list =
                //                HtmlDoc.DocumentNode.SelectNodes(
                //                    "((//div[@class='khung_tuyendung']/table//tr/td/table//tr/td/table)[5]//td)[position()>5]");


                // list thong tin lien he
                var listcontact =
                   HtmlDoc.DocumentNode.SelectNodes(
                        "((//div[@class='khung_tuyendung']/table//tr/td/table//tr/td/table//tr/td/table)[9]//td)[position()>2]");

                // list chi tiet cong viec
                var listwork =
                         HtmlDoc.DocumentNode.SelectNodes(
                             "((//div[@class='khung_tuyendung']/table//tr/td/table//tr/td/table//tr/td/table)[6]//td)");
                // list so luoc cong ty
                var listcompany =
                  HtmlDoc.DocumentNode.SelectNodes(
                  "((//div[@class='khung_tuyendung']/table//tr/td/table//tr/td/table//tr/td/table)[3]//td)");
                // list ngay bat dau/ ket thuc
                var listdate =
                      HtmlDoc.DocumentNode.SelectNodes(
                          "(//div[@class='khung_danh_gia']/div[@id='ctl00_thongtinntd_danhgia']//div)[position()>5]");
                #endregion

                #region Add to Dictionary
                
                int i4 = 1;

                list1.Add("Tên công ty :");
                foreach (var item in listcompany)
                {
                    string x = item.InnerText.Trim();
                    if (x.CompareTo("") != 0)
                    {
                        if (x.EndsWith(":"))
                        {
                            list1.Add(x);
                        }
                        else
                        {
                            list2.Add(x);
                        }
                    }
                    
                    
                }

                foreach (var item in listwork)
                {
                    string x = item.InnerText.Trim();
                    if (x.CompareTo("") != 0)
                    {
                        if (x.EndsWith(":"))
                        {
                            list1.Add(x);
                        }
                        else
                        {
                            list2.Add(x);
                        }
                    }
                }

                foreach (var item in listcontact)
                {
                    string x = item.InnerText.Trim();
                    if (x.CompareTo("") != 0)
                    {
                        if (x.EndsWith(":"))
                        {
                            list1.Add(x);
                        }
                        else
                        {
                            list2.Add(x);
                        }
                    }
                }

                foreach (var item in listdate)
                {
                    string x = item.InnerText.Trim();
                    x = x.Substring(9);
                    if (i4 % 3 == 1)
                    {
                        list1.Add("Bắt đầu:");
                        list2.Add(x);
                    }
                    else if (i4 % 3 == 2)
                    {
                        list1.Add("Kết thúc:");
                        list2.Add(x);
                    }
                    i4++;
                }

                for (int i = 0; i < list2.Count; i++)
                {
                    detail[list1[i]] = list2[i];
                }

                DataList.Add(detail);
                #endregion       

                #region Add to Database

                funct.insertToList(detail);

                #endregion

            }
            if (funct.list.Count > 0)
            {
                funct.insertToDB();
            }
        }

    }
    }

